package polymorphic;

/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2022/9/18 11:12
 * 向上类型转换测试
 *  执行过程：
 */

class B{
    public B(){//2.D继承B，所以new D 之前需要对 B 进行构造
         func();//3.发现func被覆写，找new在哪，当子类覆写了这个方法，则调用的一定是子类覆写后的方法，此时程序还在B类的无参构造
                //由于func被子类D重写，因此调用重写后的func方法
    }
    public void func(){
        System.out.println("B的func方法");
    }
}
public class D extends B{
    private int  num  = 1;//5.num被赋值为1
    public void func(){//4.对象成员初始化操作在构造方法中完成，此时JVM还在B类的无参构造中，还没走到D的构造方法，此时num为0
        System.out.println("D的func方法，num = " + num);
    }

    public static void main(String[] args) {
        D d = new D(); //1.入口
    }
}
